package internal.exchange;

/**
 * @描述：对冒泡排序常见的改进方法是加入一标志性变量exchange，用于标志某一趟排序过程中是否有数据交换，如果进行某一趟排序时并没有进行数据交换，则说明数据已经按要求排列好，可立即结束排序，避免不必要的比较过程
 * @作者：hongxingfan
 * @时间：2014年9月5日 上午9:38:26
 */
public class BubbleSort_1 {

    public static void main(String[] args) {
        int[] datas = { 9, 4, 1, 8, 7, 5, 2, 0, 3, 4, 6 };

        // 冒泡排序
        bubbleSort_1(datas);

        // 输出结果
        for (int data : datas)
            System.out.print(data + " ");
        System.out.println();
    }

    // 改进后的冒泡排序
    public static void bubbleSort_1(int[] datas) {
        int num = 0; // 比较的次数；这里是8次；比BubbleSort的11小
        int i = datas.length;
        while (i > 0) {
            int pos = 0;
            num++;
            for (int j = 1; j < datas.length; j++) {
                if (datas[j - 1] > datas[j]) {
                    pos = j;
                    int tmp = datas[j];
                    datas[j] = datas[j - 1];
                    datas[j - 1] = tmp;
                }
            }
            i = pos;
        }
        System.out.println(num);
    }
}
